//给你一个整数数组 arr，请你帮忙统计数组中每个数的出现次数。 
//
// 如果每个数的出现次数都是独一无二的，就返回 true；否则返回 false。 
//
// 
//
// 示例 1： 
//
// 输入：arr = [1,2,2,1,1,3]
//输出：true
//解释：在该数组中，1 出现了 3 次，2 出现了 2 次，3 只出现了 1 次。没有两个数的出现次数相同。 
//
// 示例 2： 
//
// 输入：arr = [1,2]
//输出：false
// 
//
// 示例 3： 
//
// 输入：arr = [-3,0,1,-3,1,1,1,-3,10,0]
//输出：true
// 
//
// 
//
// 提示： 
//
// 
// 1 <= arr.length <= 1000 
// -1000 <= arr[i] <= 1000 
// 
// Related Topics 哈希表 
// 👍 101 👎 0

package leetcode.editor.cn;

import common.util.MyUtil;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * Java：独一无二的出现次数
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P1207_UniqueNumberOfOccurrences {
    public static void main(String[] args) {
        Solution solution = new P1207_UniqueNumberOfOccurrences().new Solution();
        boolean b = solution.uniqueOccurrences(MyUtil.createArray(1,2));
        MyUtil.print(b);

    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public boolean uniqueOccurrences(int[] arr) {
            if(arr == null || arr.length == 1) {
                return true;
            }
            Map<Integer, Integer> map = new HashMap<>();
            // 次数统计
            for(int i : arr) {
                Integer v = map.get(i);
                if(v == null) {
                    map.put(i, 1);
                } else {
                    map.put(i, v + 1);
                }
            }
            Set<Integer> set = new HashSet<>();
            for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
                set.add(entry.getValue());
            }
            return map.size() == set.size();
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

}